package com.holly.unit.deform.designer.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.holly.unit.db.api.pojo.entity.BaseEntity;
import com.holly.unit.deform.designer.kit.StrKit;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 类描述: 表单创建表字段域 实体类
 *
 * @author fxr
 * @version 1.0.0
 * @date 2022/8/2 9:28
 */
@Data
@TableName("create_table_field")
@EqualsAndHashCode(callSuper = false)
public class CreateTableField extends BaseEntity {

    /**主键id*/
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 表ID
     */
    private String tableId;

    /**
     * 字段名称
     */
    private String fieldName;

    /**
     * 字段注释
     */
    private String fieldRemark;

    /**
     * 数据格式
     */
    private String dataFormat;

    /**
     * 字段长度
     */
    private String len;

    /**
     * 字段排序
     */
    private int sortOrder=0;


    /**
     * 是否作为查询条件 是否作为搜索条件
     */
    private Integer whetherSearch;

    /**
     * 数据源类型 1-静态数据源2-动态数据接口方式3-动态数据关联表方式
     */
    private Integer dsType;

    /**静态数据 静态数据-JSON数据存储*/
    private String staticData;

    /**动态数据-接口方式*/
    private String dynamicInterface;

    /**动态数据-关联表表名*/
    private String dynamicRealitionTb;

    /**动态数据-关联表方式-关联字段*/
    private String dynamicRealitionTbCol;

    /**列表显示*/
    private Integer viewListCol;

    /**表单显示*/
    private Integer viewFormCol;

    /**是否持久化*/
    private Integer whetherPersistence;

    /**回收站 是否进入回收站0-代表未进入1-代表进入*/
    private Integer whetherRecycle;

    /**关系 表之间的关系：1-oneToOne 2-oneToOneParent 3-oneToMany 4-manyToMany*/
    private Integer relation;

    /***
     * 非数据库字段，用于修改表的时候用
     */
    private StringBuffer changeFields = new StringBuffer();


    //////////领域方法///////////
    /**
     * 判断是否相等
     * @param field
     * @return
     */
    public boolean isSame(CreateTableField field) {
        boolean is = false;
        if(null != field) {
            is = (this.id.equals(field.getId()) && this.fieldName.equals(field.getFieldName()) &&
                    this.dataFormat.equals(field.getDataFormat()) && StrKit.handleNumNull(this.len).equals(StrKit.handleNumNull(field.getLen()))
                    && StrKit.handleNull(this.fieldRemark).equals(field.getFieldRemark()));
        }
        return is;
    }

    /**
     * 判断名称是否相等
     * @param field
     * @return
     */
    public boolean isNameSame(CreateTableField field) {
        boolean is = false;
        if(null != field) {
            is = this.fieldName.equals(field.getFieldName());
        }
        return is;
    }


    /**
     * 判断数据格式是否相等
     * @param field
     * @return
     */
    public boolean isDataFormatSame(CreateTableField field) {
        boolean is = false;
        if(null != field) {
            is = this.dataFormat.equals(field.getDataFormat());
        }
        return is;
    }


    /**
     * 判断长度是否相等
     * @param field
     * @return
     */
    public boolean isLengthSame(CreateTableField field) {
        boolean is = false;
        if(null != field) {
            is = StrKit.handleNumNull(this.len).equals(StrKit.handleNumNull(field.getLen()));
        }
        return is;
    }

    /**
     * 判断注释是否相等
     * @param field
     * @return
     */
    public boolean isRemart(CreateTableField field) {
        boolean is = false;
        if(null != field) {
            is = StrKit.handleNull(this.getFieldRemark()).equals(StrKit.handleNull(field.getFieldRemark()));
        }
        return is;
    }


}
